package org.example.flea_market_mvc.controller;

import org.example.flea_market_mvc.controller.*;
import org.example.flea_market_mvc.entity.User;
import org.example.flea_market_mvc.param.UserParam;
import org.example.flea_market_mvc.service.user.UserService;
import org.example.flea_market_mvc.service.user.impl.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 用户控制器
 * 处理用户相关的HTTP请求，包括用户注册、登录、查询、修改等操作
 */
@RestController
@RequestMapping("/api/users")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 用户注册
     * @param userParam 用户参数对象
     * @return 操作结果（成功/失败）
     */
    @PostMapping("/register")
    public ApiResponse<String> register(@RequestBody UserParam userParam) {
        int result = userService.insert(userParam);
        if (result > 0) {
            return ApiResponse.success("注册成功");
        } else {
            return ApiResponse.error(HttpStatus.BAD_REQUEST.value(), "注册失败");
        }
    }

    /**
     * 用户登录
     * @param loginParam 登录参数对象
     * @return 操作结果（成功/失败）
     */
    @PostMapping("/login")
    public ApiResponse<User> login(@RequestBody UserParam loginParam) {
        System.out.println("登录api触发成功---------------------------------------------------------------");
        User user = userService.login(loginParam);
        if (user != null) {
            return ApiResponse.success("登录成功", user);
        } else {
            return ApiResponse.unauthorized("登录失败，用户名或密码错误");
        }
    }

    /**
     * 删除用户
     * @param id 用户ID
     * @return 操作结果（成功/失败）
     */
    @DeleteMapping("/{id}")
    public ApiResponse<String> deleteUser(@PathVariable Long id) {
        System.out.println("删除用户api触发成功---------------------------------------------------------------");
        int result = userService.deleteById(id);
        if (result > 0) {
            return ApiResponse.success("删除用户成功");
        } else {
            return ApiResponse.error(HttpStatus.NOT_FOUND.value(), "删除用户失败，用户不存在");
        }
    }

    /**
     * 修改用户信息
     * @param userParam 用户参数对象
     * @return 操作结果（成功/失败）
     */
    @PutMapping
    public ApiResponse<String> updateUser(@RequestBody User userParam) {
        System.out.println("修改用户信息api触发成功---------------------------------------------------------------");
        int result = userService.update(userParam);
        if (result > 0) {
            return ApiResponse.success("修改用户成功");
        } else {
            return ApiResponse.error(HttpStatus.BAD_REQUEST.value(), "修改用户失败");
        }
    }

    /**
     * 查询单个用户
     * @param id 用户ID
     * @return 用户实体对象
     */
    @GetMapping("/{id}")
    public ApiResponse<User> getUser(@PathVariable Long id) {
        System.out.println("查询单个用户api触发成功---------------------------------------------------------------");
        User user = userService.selectById(id);
        if (user != null) {
            return ApiResponse.success("查询成功", user);
        } else {
            return ApiResponse.notFound("用户不存在");
        }
    }

    /**
     * 查询所有用户
     * @return 用户列表
     */
    @GetMapping
    public ApiResponse<List<User>> getAllUsers() {
        System.out.println("查询所有用户api触发成功---------------------------------------------------------------");

        List<User> users = userService.selectAll();
        return ApiResponse.success(users);
    }

    /**
     * 用户登出
     */
    @PostMapping("/logout")
    public ApiResponse<String> logout() {
        System.out.println("用户登出api触发成功---------------------------------------------------------------");

        // 实际项目可清理Session或Token
        return ApiResponse.success("登出成功");
    }

    /**
     * 获取当前登录用户信息（示例，实际可结合Session/Token实现）
     */
    @GetMapping("/me")
    public ApiResponse<User> getCurrentUser() {
        System.out.println("获取当前登录用户信息api触发成功---------------------------------------------------------------");

        // 实际项目可从Session/Token获取当前用户
        return ApiResponse.error(401, "未登录");
    }
}